﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using CapturarObjetos.Objetos;
using CapturarObjetos.Nucleo;

namespace CapturarObjetos.Fases
{
    class MapEditor
    {

        #region Atributos

        //Content, usado pra dar load nos gráficos
        ContentManager Content;

        // Objetos do cenário.
        ObjetoJogo energia, cilindro, chao;
        Jogador jogador;

        Barreira barreiraEx;
        Energia energiaEx;

        /// <summary>
        /// Lista de todos os objetos do game
        /// </summary>
        public List<ObjetoJogo> objetos = new List<ObjetoJogo>();

        public int numEnergias = 0;

        public int numBarreiras = 0;


        // Cameras utilizadas
        Camera camera;
        #endregion



        public MapEditor(ContentManager content, Camera camera, Jogador jogador)
        {
            this.Content = content;
            this.camera = camera;
            this.jogador = jogador;

            barreiraEx = new Barreira(content, "cilindro");
            barreiraEx.Posicao += new Vector3(1000.0f, -10f, 0.0f);

            energiaEx = new Energia(content, "energia");
            energiaEx.Posicao += new Vector3(1000.0f, -10f, 0.0f);
            
            chao = new ObjetoJogo();
            chao.Modelo = Content.Load<Model>("chao");

            objetos.Add(chao);
        }

        /// <summary>
        /// Método que criei pra tnetar converter
        /// </summary>
        /// <param name="pos"></param>
        /// <returns></returns>
        public Vector3 Vector2ToVector3(Vector2 pos)
        {
            Vector3 posicao = new Vector3();


            return posicao;
        }

       
        public void Update(MouseState mouse, MouseState mouse_anterior, KeyboardState teclado_atual, KeyboardState teclado_anterior)
        {
            jogador.Ativo = false;


            if (teclado_atual.IsKeyDown(Keys.Delete) && !teclado_anterior.IsKeyDown(Keys.Delete))
            {
                objetos[objetos.Count-1].Ativo = false;
                Console.WriteLine(objetos.Count);
            }


            if ((mouse.LeftButton == ButtonState.Pressed) && mouse_anterior.LeftButton != ButtonState.Pressed)
            {
                energia = new Energia(this.Content, "energia");
                energia.Escala = 0.05f;
                energia.Posicao += jogador.Posicao;
                objetos.Add(energia);
            }

            if ((mouse.RightButton == ButtonState.Pressed) && mouse_anterior.RightButton != ButtonState.Pressed)
            {
                cilindro = new Barreira(Content, "cilindro");
                cilindro.Escala = 0.55f;
                cilindro.Posicao += jogador.Posicao;
                objetos.Add(cilindro);
            }

            if (mouse.MiddleButton == ButtonState.Pressed && mouse_anterior.MiddleButton != ButtonState.Pressed)
            {
                Console.WriteLine("\n  ######################################################### \n OBJETOS GERADOS PELO MAP EDITOR \n \n");
                foreach (ObjetoJogo obj in this.objetos)
                {
                    if (obj.GetType() == barreiraEx.GetType() && obj.Ativo)
                    {
                        numBarreiras++;
                        Console.WriteLine("   cilindro = new Barreira(content, \"cilindro\"); \n   cilindro.Escala = 0.05f; \n   cilindro.Posicao += new Vector3(" + (int)obj.Posicao.X + ", " + (int)obj.Posicao.Y + ", " + (int)obj.Posicao.Z + "); \n   objetos.Add(cilindro);");
                    }
                    else if ((obj.GetType() == energiaEx.GetType()) && obj.Ativo)
                    {
                        numEnergias++;
                        Console.WriteLine("   energia = new Energia(content, \"energia\"); \n   energia.Escala = 0.05f; \n   energia.Posicao += new Vector3(" + (int)obj.Posicao.X + ", " + (int)obj.Posicao.Y + ", " + (int)obj.Posicao.Z + "); \n   objetos.Add(energia);");
                    }
                }


                Console.WriteLine("\n \n NUMERO DE ENERGIAS = "+ numEnergias +" \n\n NUMERO DE BARREIRAS = "+numBarreiras+"\n\n ######################################################### \n");
            }

        }

        public void Draw()
        {
            foreach (ObjetoJogo obj in objetos)
            {
                obj.Desenhar(camera);
            }
        }

    }
}
